/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package agb.Modelo;

import agb.Conexion.Conexion;
import java.sql.*;
import java.util.ArrayList;
import java.util.Vector;
import java.util.Date;

/**
 *
 * @author Administrator
 */
public class Alumno {

    private String nombreCompleto,  direccion,  lugar,  distrito,  provincia,  departamento,  parentesco,  telefono;
    private int codigo,  codMatricula;
    private String pariente;

    public String getPariente() {
        return pariente;
    }

    public void setPariente(String pariente) {
        this.pariente = pariente;
    }
    /**
     * @return the nombreCompleto
     */
    
    public String getNombreCompleto() {
        return nombreCompleto;
    }

    /**
     * @param nombreCompleto the nombreCompleto to set
     */
    public void setNombreCompleto(String nombreCompleto) {
        this.nombreCompleto = nombreCompleto;
    }

    /**
     * @return the direccion
     */
    public String getDireccion() {
        return direccion;
    }

    /**
     * @param direccion the direccion to set
     */
    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    /**
     * @return the lugar
     */
    public String getLugar() {
        return lugar;
    }

    /**
     * @param lugar the lugar to set
     */
    public void setLugar(String lugar) {
        this.lugar = lugar;
    }

    /**
     * @return the distrito
     */
    public String getDistrito() {
        return distrito;
    }

    /**
     * @param distrito the distrito to set
     */
    public void setDistrito(String distrito) {
        this.distrito = distrito;
    }

    /**
     * @return the provincia
     */
    public String getProvincia() {
        return provincia;
    }

    /**
     * @param provincia the provincia to set
     */
    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    /**
     * @return the departamento
     */
    public String getDepartamento() {
        return departamento;
    }

    /**
     * @param departamento the departamento to set
     */
    public void setDepartamento(String departamento) {
        this.departamento = departamento;
    }

    /**
     * @return the parentesco
     */
    public String getParentesco() {
        return parentesco;
    }

    /**
     * @param parentesco the parentesco to set
     */
    public void setParentesco(String parentesco) {
        this.parentesco = parentesco;
    }

    /**
     * @return the telefono
     */
    public String getTelefono() {
        return telefono;
    }

    /**
     * @param telefono the telefono to set
     */
    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public static Alumno NombreParienteSegunCodigoAlumno(int codPersonaAlumno) {
        Alumno oAlumno  = new Alumno();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select pn.apell_paterno  || ' ' ||  pn.apell_materno || ', ' || pn.primer_nombre as nombre, " +
                "tp.nombre, ub.telefono, tu.nombre, v.nombre || ' ' || ub.nombre_via || ' ' || ub.numero as direccion, " +
                "d.nombre, p.nombre, dp.nombre " +
                "from pariente  pr " +
                "inner join parentesco pt on pr.cod_pariente = pt.cod_pariente " +
                "inner join p_natural pn on pn.cod_persona = pr.cod_persona " +
                "inner join ubicacion_pariente ubp on ubp.cod_pariente = pr.cod_pariente " +
                "inner join ubicacion ub on ub.cod_ubicacion = ubp.cod_ubicacion " +
                "inner join tipo_ubicacion tu on tu.cod_tipoubicacion = ub.cod_tipoubicacion " +
                "inner join via v on v.cod_via = ub.cod_via " +
                "inner join zona z on z.cod_zona = ub.cod_zona " +
                "inner join distrito d on d.cod_distrito = ub.cod_distrito " +
                "inner join provincia p on p.cod_provincia = d.cod_provincia " +
                "inner join departamento dp on dp.cod_departamento = p.cod_departamento " +
                "inner join tipo_pariente tp on tp.cod_tipopariente = pt.cod_tipopariente " +
                "where pt.cod_persona = ? " +
                "and ub.numero <> ''  " +
                "and ub.nombre_zona <> '' " +
                "and ub.nombre_via <> ''";
        try {
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codPersonaAlumno);
            rs = ps.executeQuery();
            while (rs.next()) {
                
                oAlumno.setNombreCompleto(rs.getString(1));
                oAlumno.setParentesco(rs.getString(2));
                oAlumno.setTelefono(rs.getString(3));
                oAlumno.setLugar(rs.getString(4));
                oAlumno.setDireccion(rs.getString(5));
                oAlumno.setDistrito(rs.getString(6));
                oAlumno.setProvincia(rs.getString(7));
                oAlumno.setDepartamento(rs.getString(8));
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        } catch (SQLException ex) {
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return oAlumno;
    }

    public static Alumno NombreAlumnoSegunCodigo(int codPersonaAlumno) {
        Alumno oAlumno = new Alumno();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select pn.apell_paterno  || ' ' ||  pn.apell_materno || ', ' || pn.primer_nombre as nombre " +
                "from  p_natural pn " +
                "where pn.cod_persona = ?";
        try {
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codPersonaAlumno);
            rs = ps.executeQuery();
            while (rs.next()) {
                
                oAlumno.setNombreCompleto(rs.getString(1));
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        } catch (SQLException ex) {
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return oAlumno;
    }

    public static ArrayList<Alumno> nombreAlumnosSegunAula(int codHorario, int anio) {
        ArrayList<Alumno> LAlumnos = new ArrayList<Alumno>();
        Alumno oAlumno = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select distinct pn.cod_persona, pn.apell_paterno || ' ' || pn.apell_materno || ',  '|| pn.primer_nombre as nombre, " +
                " m.cod_matricula " +
                "from matricula m " +
                "inner join p_natural pn on pn.cod_persona = m.cod_persona " +
                "inner join aula a on m.cod_aula = a.cod_aula " +
                "inner join programacion_aula pa on pa.cod_progaula = m.cod_progaula " +
                "inner join nivel_grado ng on pa.cod_nivelgrado = ng.cod_nivelgrado " +
                "inner join nivel n on n.cod_nivel = ng.cod_nivel " +
                "inner join grado g on g.cod_grado = ng.cod_grado " +
                "inner join horario_aula ha on ha.cod_progaula = pa.cod_progaula " +
                "inner join detalle_horarioaula dha on ha.cod_horario = dha.cod_horario " +
                "where dha.cod_horario = ? " +
                "and ha.cod_aula in (" +
                "select m.cod_aula                   " +
                "from matricula m2                   " +
                "where  TO_CHAR(m2.fecha_registro, 'YYYY') = ?) " +
                "ORDER BY pn.apell_paterno || ' ' || pn.apell_materno || ',  '|| pn.primer_nombre";
        try {
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codHorario);
            ps.setInt(2, anio);
            rs = ps.executeQuery();
            while (rs.next()) {
                oAlumno = new Alumno();
                oAlumno.setCodigo(rs.getInt(1));
                oAlumno.setNombreCompleto(rs.getString(2));
                oAlumno.setCodMatricula(rs.getInt(3));
                LAlumnos.add(oAlumno);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        } catch (SQLException ex) {
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return LAlumnos;
    }

        public static ArrayList<Alumno> listaAlumnosSegunAula(int codGrado, int codSeccion, int codNivel) {
        ArrayList<Alumno> LAlumnos = new ArrayList<Alumno>();
        Alumno oAlumno = null;
        Date fecha = new Date();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select distinct pn.apell_paterno || ' ' || pn.apell_materno || ',  '|| pn.primer_nombre as nombre,  pn.cod_persona " +
                "from matricula m " +
                "inner join p_natural pn on pn.cod_persona = m.cod_persona " +
                "inner join aula a on m.cod_aula = a.cod_aula " +
                "inner join programacion_aula pa on pa.cod_progaula = m.cod_progaula " +
                "inner join nivel_grado ng on pa.cod_nivelgrado = ng.cod_nivelgrado " +
                "inner join nivel n on n.cod_nivel = ng.cod_nivel " +
                "inner join grado g on g.cod_grado = ng.cod_grado " +
                "where  g.cod_grado = ?  " +
                "and a.cod_aula = ? " +
                "and n.cod_nivel = ? " +
                "and TO_CHAR(m.fecha_registro, 'YYYY') =  " + (fecha.getYear() + 1900) + " " +
                "and m.estado_actividad = true ";
        try {
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codGrado);
            ps.setInt(2, codSeccion);
            ps.setInt(3, codNivel);
            rs = ps.executeQuery();
            while (rs.next()) {
                oAlumno = new Alumno();
                oAlumno.setNombreCompleto(rs.getString(1));
                oAlumno.setCodigo(rs.getInt(2));
                LAlumnos.add(oAlumno);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        } catch (SQLException ex) {
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return LAlumnos;
    }



    public static Alumno datosParienteAlumnoSegunCodigo(int codPersona) {
        Alumno oAlumno = new Alumno();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select pn.apell_paterno  || ' ' ||  pn.apell_materno || ', ' || pn.primer_nombre as nombre, " +
                "tp.nombre, ub.telefono, tu.nombre, v.nombre || ' ' || ub.nombre_via || ' ' || ub.numero as direccion, " +
                "d.nombre, p.nombre, dp.nombre " +
                "from pariente  pr " +
                "inner join parentesco pt on pr.cod_pariente = pt.cod_pariente " +
                "inner join p_natural pn on pn.cod_persona = pr.cod_persona " +
                "inner join ubicacion_pariente ubp on ubp.cod_pariente = pr.cod_pariente " +
                "inner join ubicacion ub on ub.cod_ubicacion = ubp.cod_ubicacion " +
                "inner join tipo_ubicacion tu on tu.cod_tipoubicacion = ub.cod_tipoubicacion " +
                "inner join via v on v.cod_via = ub.cod_via " +
                "inner join zona z on z.cod_zona = ub.cod_zona " +
                "inner join distrito d on d.cod_distrito = ub.cod_distrito " +
                "inner join provincia p on p.cod_provincia = d.cod_provincia " +
                "inner join departamento dp on dp.cod_departamento = p.cod_departamento " +
                "inner join tipo_pariente tp on tp.cod_tipopariente = pt.cod_tipopariente " +
                "where pt.cod_persona = ? and ub.numero <> ''  " +
                "and ub.nombre_zona <> '' and ub.nombre_via <> ''";
        try {
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codPersona);
            rs = ps.executeQuery();
            while (rs.next()) {
                
                oAlumno.setNombreCompleto(rs.getString(1));
                oAlumno.setParentesco(rs.getString(2));
                oAlumno.setTelefono(rs.getString(3));
                oAlumno.setLugar(rs.getString(4));
                oAlumno.setDireccion(rs.getString(5));
                oAlumno.setDistrito(rs.getString(6));
                oAlumno.setProvincia(rs.getString(7));
                oAlumno.setDepartamento(rs.getString(8));
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        } catch (SQLException ex) {
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return oAlumno;
    }

    /**
     * @return the codigo
     */
    public int getCodigo() {
        return codigo;
    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    /**
     * @return the codMatricula
     */
    public int getCodMatricula() {
        return codMatricula;
    }

    /**
     * @param codMatricula the codMatricula to set
     */
    public void setCodMatricula(int codMatricula) {
        this.codMatricula = codMatricula;
    }
}
